#pragma once

#include <vector>
#include <list>
#include <deque>

namespace bit
{
	// 适配器 -- 转换 比如适配vector，list容器
	//可以给模板参数给缺省值，注意给的是类型
	//可维护性
	//设计模式
	//适配器模式 -- 封装转换
	//迭代器模式 -- 封装统一访问方式（数据结构访问都可以用）

	template<class T, class Container = deque <T>>
	class stack
	{
	public:
		void push(const T&x)
		{
			_con.push_back(x);
		}
		void pop()
		{
			_con.pop_back();  

			//这样可以支持vector,但是效率很低
			// _con.erase(_con.begin());
		}
		const T& top()
		{
			return _con.back();
		}

		bool empty()
		{
			return _con.empty();
		}

		size_t size()
		{
			 _con.size();
		}

	private:
		Container _con; //表示该容器
	}; 
}